<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <script>

     //定义类：人类
     class People{
        //属性
        constructor(names,sexs,ages){
           // console.log('Hello...');
            this.xingming = names;
            this.sex = sexs;
            this.age = ages;
        }

        eat(){
            console.log(`${this.xingming} ${this.sex} ${this.age} 正在吃饭`);
        }

        sleep(){
            console.log(`${this.xingming} ${this.sex} ${this.age} 正在睡觉...`);
        }        
     }


     //定义类：工人类
     class Worker extends People{

     }

     //实例类：
     let laoliang = new Worker('老梁','男',38);
     laoliang.eat();


     //定义类：学生类
     //类的继承：extends
     //类的继承要注意的事项： 
     //1)、如果子类没有定义构造方法在实例化子类时则默认调用父类的构造方法;
     //2)、如果子类定义了构造方法在实例化子类时则会调用子类自己的构造方法，同时要在子类的构造方法中先调用super()方法；
     //3)、super()方法有两个功能：
     //    第一个：将父类中的this继承下来
     //    第二个：给父类中的属性传递属性值
     //4)、方法重构/重写：
     //   4.1)什么是方法重构/重写？
     //        当父类中的方法满足不了子类的需求时则需要对父类中的方法进行重构/重写
     //   4.2)怎样进行方法重构/重写？
     //       在子类中定义一个和父类同名的方法即可
     //5)、super可以当作对象时可以访问父类中的方法、但不能访问父类的属性



     class Student extends People{
          constructor(xh,xm,xb,nl){            
          //  console.log(xh,xm,xb,nl, 'yes ok...');
            super(xm,xb,nl);
            this.xuehao = xh;  //学号
          }

          homework(){
           // this.sleep();  //访问父类中的方法
           super.sleep();  //可以通过super对象访问父类中的方法、但不能访问父类中的属性
           console.log(super.xingming,this.xingming,'super对象...');
            console.log(`${this.xuehao} ${this.xingming} ${this.sex} ${this.age} 正在认真的写作业！！`);
          }

          eat(){
            console.log(`${this.xuehao} ${this.xingming} ${this.sex} ${this.age} 正在大口大口地吃饭。。。`);
          }
     }

     //实例化类：对象
     let xiaoming =  new Student('001','小明','男',20);
     xiaoming.eat();
     xiaoming.homework();


    </script>
</head>
<body>
    
</body>
</html>